/*
 * @Description: 金额单位展示
 * @Date: 2022-09-06 14:43:09
 */
import { Tooltip } from 'antd';
import moneyShow from './MoneyShow';
import styles from './index.less';

const MoneyShow = moneyShow(1);

const MoneyUnitShow = ({
  value,
  precision = 2,
  unit,
  unitShow = true, // 是否展示单位
  showTips = false,
  ...rest
}) => {
  const numberFormat = () => {
    let param = {};
    let k = 10000;
    let sizes = ['', '万', '亿', '万亿'];
    let i;
    if (isNaN(Number(value))) {
      param.value = value;
      param.unit = unit || '';
      return param;
    }
    if (['万', '亿', '万亿'].includes(unit)) {
      // 传入unit，按传入来
      const unitMap = {
        万: 10000,
        亿: 100000000,
        万亿: 1000000000000,
      };
      k = unitMap[unit]; // 单位，默认为万
      param.value = (value / k).toFixed(precision);
      param.unit = unit;
    } else {
      // 未传入合法unit值，自动计算
      if (value < k) {
        param.value = value;
        param.unit = '';
      } else {
        i = Math.floor(Math.log(value) / Math.log(k));
        param.value = (value / Math.pow(k, i)).toFixed(precision);
        param.unit = sizes[i];
      }
    }

    // if (value < k) {
    //   param.value = value;
    //   param.unit = '';
    // } else {
    //   // 未传入合法unit值，自动计算
    //   if (!['万', '亿', '万亿'].includes(unit)) {
    //     i = Math.floor(Math.log(value) / Math.log(k));
    //     param.value = (value / Math.pow(k, i)).toFixed(precision);
    //     param.unit = sizes[i];
    //   } else {
    //     // 传入unit，按传入来
    //     const unitMap = {
    //       万: 10000,
    //       亿: 100000000,
    //       万亿: 1000000000000,
    //     };
    //     k = unitMap[unit]; // 单位，默认为万
    //     param.value = (value / k).toFixed(precision);
    //     param.unit = unit;
    //   }
    // }
    return param;
  };

  const item = numberFormat() || {};

  return showTips && item?.value !== value ? (
    <Tooltip
      title={
        <MoneyShow
          className="showTipMoney"
          value={value}
          precision={item.precision}
          {...rest}
        />
      }
    >
      <MoneyShow
        value={item?.value}
        prefix={unitShow ? '￥' : ''}
        suffix={unitShow && item?.unit}
        precision={precision}
        {...rest}
      />
    </Tooltip>
  ) : (
    <MoneyShow
      value={item?.value}
      prefix={unitShow ? '￥' : ''}
      suffix={unitShow && item?.unit}
      precision={precision}
      {...rest}
    />
  );
};

export default MoneyUnitShow;
